今天繼續練習指令。
SHR是SHift Right往右移的意思,到底移幾位呢,這時有了之前的練習經驗,例如REP(重覆)幾次,我們會用CX,所以這個計數暫存器對於要反覆做幾次動作,是專門來配合的。
而AND,當然高階語言也用得很兇。而低階語言比較有真值表的效果,
1 AND 1=1
1 AND 0=0
0 AND 1=0
0 AND 0=0
這些是常用的指令,而要換成2進位,比較能體會出其效果。
可參考小木偶前輩的說明:
http://home.educities.edu.tw/wanker742126/asm/ch04.html
練習1,筆者用F(16進位)=1111(2進位)效果比較簡單清楚
-a
08FA:0100 mov al,f0
08FA:0102 shr al,4
08FA:0105
-t
AX=00F0
-t
AX=000F
移4次,就變到AL的低位。
可以更鮮明的感受,AX=AH+AL,而AL又可以用2個16進位數表示。F0, 移4位,變0F.
具體的用實際的數字代入。
再來一個練習:
-a
08FA:0100 mov al,f0
08FA:0102 shr al,1
08FA:0104 shr al,1
08FA:0106 shr al,1
08FA:0108 shr al,1
08FA:010A
-t
AX=00F0
-t
AX=0078
-t
AX=003C
-t
AX=001E
-t
AX=000F
1111-0000->0111-1000->0011-1100->0001-1110->0000-1111,
這樣可以很具體的感受次往右移,空的位置補0的效果。
---------------------------------
AND 的練習:
-a
08FA:0100 mov al,0f
08FA:0102 and al,0f
08FA:0104
-t
AX=000F
-t
AX=000F
-a 104
08FA:0104 and al,0
-t
AX=0000
AND是2進位0/1的運算,
但是程式裏是放16進位的數字,換算成0/1後,再來做運算,得次到結果,放回原暫存器。
小結:
看似簡單的練習,除了放鬆心情外,其實還是有意外的收獲。
更清楚AX,AL的長度。
timloo提到:
看似簡單的練習,除了放鬆心情外,其實還是有意外的收獲。
有時光聽鍵盤敲擊的聲音,頓時就覺得人生的存在有了意義.......